<!DOCTYPE html>
<html>
<!-- Created by GNU Texinfo 7.1.1, https://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- This file documents the use of the GNU compilers.

Copyright © 1988-2023 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Funding Free Software", the Front-Cover
Texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below).  A copy of the license is included in the section entitled
"GNU Free Documentation License".

(a) The FSF's Front-Cover Text is:

A GNU Manual

(b) The FSF's Back-Cover Text is:

You have freedom to copy and modify this GNU Manual, like GNU
     software.  Copies published by the Free Software Foundation raise
     funds for GNU development. -->
<title>Structure-Layout Pragmas (Using the GNU Compiler Collection (GCC))</title>

<meta name="description" content="Structure-Layout Pragmas (Using the GNU Compiler Collection (GCC))">
<meta name="keywords" content="Structure-Layout Pragmas (Using the GNU Compiler Collection (GCC))">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta name="viewport" content="width=device-width,initial-scale=1">

<link href="index.html" rel="start" title="Top">
<link href="Indices.html" rel="index" title="Indices">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Pragmas.html" rel="up" title="Pragmas">
<link href="Weak-Pragmas.html" rel="next" title="Weak Pragmas">
<link href="Symbol_002dRenaming-Pragmas.html" rel="prev" title="Symbol-Renaming Pragmas">
<style type="text/css">
<!--
a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
kbd.key {font-style: normal}
span:hover a.copiable-link {visibility: visible}
-->
</style>


</head>

<body lang="en_US">
<div class="subsection-level-extent" id="Structure_002dLayout-Pragmas">
<div class="nav-panel">
<p>
Next: <a href="Weak-Pragmas.html" accesskey="n" rel="next">Weak Pragmas</a>, Previous: <a href="Symbol_002dRenaming-Pragmas.html" accesskey="p" rel="prev">Symbol-Renaming Pragmas</a>, Up: <a href="Pragmas.html" accesskey="u" rel="up">Pragmas Accepted by GCC</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Indices.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<h4 class="subsection" id="Structure_002dLayout-Pragmas-1"><span>6.62.10 Structure-Layout Pragmas<a class="copiable-link" href="#Structure_002dLayout-Pragmas-1"> &para;</a></span></h4>

<p>For compatibility with Microsoft Windows compilers, GCC supports a
set of <code class="code">#pragma</code> directives that change the maximum alignment of
members of structures (other than zero-width bit-fields), unions, and
classes subsequently defined. The <var class="var">n</var> value below always is required
to be a small power of two and specifies the new alignment in bytes.
</p>
<ol class="enumerate">
<li> <code class="code">#pragma pack(<var class="var">n</var>)</code> simply sets the new alignment.
</li><li> <code class="code">#pragma pack()</code> sets the alignment to the one that was in
effect when compilation started (see also command-line option
<samp class="option">-fpack-struct[=<var class="var">n</var>]</samp> see <a class="pxref" href="Code-Gen-Options.html">Options for Code Generation Conventions</a>).
</li><li> <code class="code">#pragma pack(push[,<var class="var">n</var>])</code> pushes the current alignment
setting on an internal stack and then optionally sets the new alignment.
</li><li> <code class="code">#pragma pack(pop)</code> restores the alignment setting to the one
saved at the top of the internal stack (and removes that stack entry).
Note that <code class="code">#pragma pack([<var class="var">n</var>])</code> does not influence this internal
stack; thus it is possible to have <code class="code">#pragma pack(push)</code> followed by
multiple <code class="code">#pragma pack(<var class="var">n</var>)</code> instances and finalized by a single
<code class="code">#pragma pack(pop)</code>.
</li></ol>

<p>Some targets, e.g. x86 and PowerPC, support the <code class="code">#pragma ms_struct</code>
directive which lays out structures and unions subsequently defined as the
documented <code class="code">__attribute__ ((ms_struct))</code>.
</p>
<ol class="enumerate">
<li> <code class="code">#pragma ms_struct on</code> turns on the Microsoft layout.
</li><li> <code class="code">#pragma ms_struct off</code> turns off the Microsoft layout.
</li><li> <code class="code">#pragma ms_struct reset</code> goes back to the default layout.
</li></ol>

<p>Most targets also support the <code class="code">#pragma scalar_storage_order</code> directive
which lays out structures and unions subsequently defined as the documented
<code class="code">__attribute__ ((scalar_storage_order))</code>.
</p>
<ol class="enumerate">
<li> <code class="code">#pragma scalar_storage_order big-endian</code> sets the storage order
of the scalar fields to big-endian.
</li><li> <code class="code">#pragma scalar_storage_order little-endian</code> sets the storage order
of the scalar fields to little-endian.
</li><li> <code class="code">#pragma scalar_storage_order default</code> goes back to the endianness
that was in effect when compilation started (see also command-line option
<samp class="option">-fsso-struct=<var class="var">endianness</var></samp> see <a class="pxref" href="C-Dialect-Options.html">Options Controlling C Dialect</a>).
</li></ol>

</div>
<hr>
<div class="nav-panel">
<p>
Next: <a href="Weak-Pragmas.html">Weak Pragmas</a>, Previous: <a href="Symbol_002dRenaming-Pragmas.html">Symbol-Renaming Pragmas</a>, Up: <a href="Pragmas.html">Pragmas Accepted by GCC</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Indices.html" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>
